/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package modele;

import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

/**
 *
 * @author ltata
 */
public class DAO {
    
    private static final String urlDep = "http://gaemedecins.appspot.com/Controleur/medParDep/listeDep";
    //Static = peut l'appeler uniquement via sa prorpe classe
    public static List<String> getLesDeps() {
        List<String> l = new ArrayList<String>();
        try {
            URL myURL = new URL(urlDep);
            Document doc;
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            DocumentBuilder db;

            db = dbf.newDocumentBuilder();

            doc = db.parse(myURL.openStream());

            Element racine = doc.getDocumentElement();
            // On se place dans le fichier XML sur "departement"
            NodeList listeDep = racine.getElementsByTagName("Departement");
            //Recup des des départements
            //Boucle qui parcours tant qu'il y a un departement
            for (int i = 0; i < listeDep.getLength(); i++) {
                Node departement = listeDep.item(i); //Recuper le num du dep 
                NodeList lesProprietes = departement.getChildNodes(); //On récupère les enfants du XML
                //recherche un nom
                //Boucle tant qu'il y a des enfants
                for (int j = 0; j < lesProprietes.getLength(); j++) {
                    if (lesProprietes.item(j).getNodeName().equals("num")) { //Si la balise XML est = "num"
                        l.add(lesProprietes.item(j).getTextContent().trim()); //On l'ajoute dans la liste l
                        break;
                    }
                }
            }
            //
        } catch (Exception ex) {
            Logger.getLogger(DAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        return l;
    }
    
    private static final String urlMed = "http://gaemedecins.appspot.com/Controleur/medParDep/listeMed/";

    public static List<String> getLesNoms() {
        List<String> l = new ArrayList<String>();
        try {
            URL myURL = new URL(urlMed);
            Document doc;
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            DocumentBuilder db;

            db = dbf.newDocumentBuilder();

            doc = db.parse(myURL.openStream());

            Element racine = doc.getDocumentElement();

            NodeList listeMed = racine.getElementsByTagName("Medecin");
            //Recup des des medecins
            for (int i = 0; i < listeMed.getLength(); i++) {
                Node medecin = listeMed.item(i);
                NodeList lesProprietes = medecin.getChildNodes();
                //recherche un nom
                for (int j = 0; j < lesProprietes.getLength(); j++) {
                    if (lesProprietes.item(j).getNodeName().equals("nom")) {
                        l.add(lesProprietes.item(j).getTextContent().trim());
                        break;
                    }
                }
            }
            //
        } catch (Exception ex) {
            Logger.getLogger(DAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        return l;
    }
    
    private static final String urlMedDuDep = "http://gaemedecins.appspot.com/Controleur/medParDep/listeMed/";
    
    public static List<Medecin> getLesMedsDuDep(String leDep) {
        List<Medecin> l = new ArrayList<Medecin>();
        try {
            URL myURL = new URL(urlMedDuDep+leDep);
            Document doc;
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            DocumentBuilder db;

            db = dbf.newDocumentBuilder();

            doc = db.parse(myURL.openStream());

            Element racine = doc.getDocumentElement();

            NodeList listeMed = racine.getElementsByTagName("Medecin");
            //Recup des des medecins
            for (int i = 0; i < listeMed.getLength(); i++) {
                Node medecin = listeMed.item(i); //On prend le medecin actuel
                NodeList lesProprietes = medecin.getChildNodes(); //On prends ces enfants
                String nom = "";
                String prenom = "";
                String adresse = "";
                String specialite = "";
                String tel = "";
                for (int j = 0; j < lesProprietes.getLength(); j++) {
                    if (lesProprietes.item(j).getNodeName().equals("nom")) { //Si la balise XML est = nom
                        nom = lesProprietes.item(j).getTextContent().trim();
                    }
                    if (lesProprietes.item(j).getNodeName().equals("prenom")) { //Si la balise XML est = prenom
                        prenom = lesProprietes.item(j).getTextContent().trim();
                    }
                    if (lesProprietes.item(j).getNodeName().equals("adresse")) { //Si la balise XML est = adresse
                        adresse = lesProprietes.item(j).getTextContent().trim();
                    }
                    if (lesProprietes.item(j).getNodeName().equals("specialite")) { //Si la balise XML est = Specialite
                       specialite = lesProprietes.item(j).getTextContent().trim();
                    }
                    if (lesProprietes.item(j).getNodeName().equals("tel")) { //Si la balise XML est = Tel
                        tel = lesProprietes.item(j).getTextContent().trim();
                    }
                }
                Medecin med = new Medecin(nom, prenom, adresse, specialite, tel); // On crée le med avec les propriété du XML
                l.add(med);
            }
            //
        } catch (Exception ex) {
            Logger.getLogger(DAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        return l;
    }
}
